﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;
using ITProject.Domain.Entities;
using System.IO;
using System.Web.Mvc;

namespace ITProject.WebUI.Models.Project
{
    /// <summary>
    /// ViewModel tworzenia projektów. W Formularzu tworzenia projektu wybieramy nazwe, opis i logo projektu. Dzieki tej klasie możemy przekonwertować ViewModel na Model.
    /// Autor: Jakub Szatkowski
    /// </summary>
    public class ProjectCreateViewModel
    {
        #region Properties

        [Required(ErrorMessage="Musisz podać nazwę projektu")]
        [Display(Name="Nazwa projektu")]
        [MaxLength(30,ErrorMessage="Nazwa projektu może mieć maksymalnie 30 znaków")]
        [MinLength(4,ErrorMessage="Nazwa projektu musi zawierać co najmniej 4 znaki")]
        public string Name { get; set; }

        [Required(ErrorMessage="Musisz podać opis projektu")]
        [Display(Name = "Opis projektu")]
        [MinLength(20,ErrorMessage="Opis projektu powinien zawierać co najmniej 20 znaków")]
        [DataType(DataType.MultilineText)]
        public string Description { get; set; }

        [Required(ErrorMessage = "Musisz podać skrócony opis projektu")]
        [Display(Name = "Skrócony opis projektu")]
        [MinLength(8, ErrorMessage = "Skrócony opis projektu powinien zawierać co najmniej 8 znaków")]
        [MaxLength(80, ErrorMessage = "Skrócony opis projektu powinien zawierać co najwyżej 80 znaków")]
        [DataType(DataType.MultilineText)]
        public string ShortDescription { get; set; }

        [Display(Name="Logo projektu")]
        public HttpPostedFileBase Logo { get; set; }

        #endregion

        #region converts

        /// <summary>
        /// Statyczna metoda konwertująca obiekt modelu widokowego projektu do encji projektu.
        /// Autor: Jakub Szatkowski
        /// </summary>
        /// <param name="projectViewModel">Obiekt modelu widokowego projektu.</param>
        /// <returns>Encja projektu</returns>
        public static ITProject.Domain.Entities.Project Convert(ProjectCreateViewModel projectViewModel)
        {
            ITProject.Domain.Entities.Project newProject = new ITProject.Domain.Entities.Project
            {
                Name = projectViewModel.Name,
                Description = projectViewModel.Description,
                ShortDescription=projectViewModel.ShortDescription,
                StartDate=DateTime.Now
            };
            if (projectViewModel.Logo != null)
            {
                string fileName = Path.GetFileName(projectViewModel.Logo.FileName);
                int indexOfDot = fileName.LastIndexOf('.');
                newProject.LogoPath = fileName.Insert(indexOfDot, DateTime.Now.ToString()).Replace(':', '.').Replace(" ", "");
            }
            return newProject;
        }

        #endregion

        private static readonly int logoWidth = 800;
        private static readonly int logoHeight = 600;
        public static int MaxLogoWidth
        {
            get { return logoWidth; }
        }
        public static int MaxLogoHeight
        {
            get { return logoHeight; }
        }
    }
}